import request from '@/utils/request'

/**
 * 获取经纪人详情
 * @param {number} agentId - 经纪人ID
 * @returns {Promise<Object>} - 经纪人信息
 */
export function getAgentInfo(agentId) {
  if (!agentId) {
    console.error('getAgentInfo: 无效的经纪人ID');
    return Promise.reject(new Error('无效的经纪人ID'));
  }
  
  return request({
    url: `/agent/${agentId}`,
    method: 'get'
  });
}

/**
 * 获取经纪人列表
 * @param {Object} params - 查询参数
 * @returns {Promise<Object>} - 经纪人列表
 */
export function getAgentList(params) {
  return request({
    url: '/agent/publiclist',
    method: 'get',
    params
  });
}

/**
 * 申请成为经纪人
 * @param {Object} data - 申请信息
 * @returns {Promise<Object>} - 申请结果
 */
export function applyAgent(data) {
  // 从localStorage获取token
  const token = localStorage.getItem('jijuxie_token');
  
  // 详细记录token和请求数据状态
  console.log('提交经纪人申请，当前token状态:', token ? '已登录' : '未登录');
  console.log('申请数据:', JSON.stringify(data, null, 2));
  
  if (!token) {
    console.error('申请经纪人失败: 未登录状态');
    return Promise.reject(new Error('请先登录后再申请成为经纪人'));
  }
  
  // 验证必要字段是否存在
  const requiredFields = ['realName', 'phone', 'idCard', 'workYears', 'introduction'];
  const missingFields = requiredFields.filter(field => !data[field]);
  if (missingFields.length > 0) {
    console.error('申请数据缺少必要字段:', missingFields.join(', '));
    return Promise.reject(new Error(`申请信息不完整，缺少: ${missingFields.join(', ')}`));
  }
  
  // 构建申请数据，使用status字段标记为待审核状态
  const agentData = {
    // 标准字段
    realName: data.realName,
    idCard: data.idCard,
    company: data.company || '吉居榭房产',
    workYears: parseInt(data.workYears) || 0,
    introduction: data.introduction,
    licenseNo: data.licenseNo || `TMP-${Date.now()}`,
    // 状态设置为待审核(0)
    status: '0',
    // 手机号字段在用户表中而非agent_info表
    phone: data.phone
  };
  
  console.log('构建的经纪人数据:', agentData);
  
  return request({
    url: '/agent/apply',
    method: 'post',
    data: agentData,
    headers: {
      'Content-Type': 'application/json',
      'Authorization': token
    },
    timeout: 30000
  }).then(response => {
    console.log('经纪人申请响应成功:', response);
    return response;
  }).catch(error => {
    console.error('经纪人申请失败:', error);
    
    // 详细分析错误原因
    if (error.response) {
      const status = error.response.status;
      console.error('响应状态码:', status);
      
      if (status === 401) {
        console.error('认证失败: 登录已过期或未登录');
        return Promise.reject(new Error('登录已过期，请重新登录'));
      } else if (status === 403) {
        console.error('权限不足: 无权申请经纪人');
        return Promise.reject(new Error('您没有申请经纪人的权限'));
      } else if (status === 400) {
        console.error('请求数据有误:', error.response.data);
        return Promise.reject(new Error(error.response.data?.msg || '申请数据有误'));
      }
    }
    
    // 网络错误处理
    if (error.message && error.message.includes('timeout')) {
      return Promise.reject(new Error('网络请求超时，请检查网络连接'));
    }
    
    return Promise.reject(error);
  });
}

/**
 * 发起与经纪人的对话
 * @param {Object} data - 对话信息，包含agentId和可选的houseId
 * @returns {Promise<Object>} - 对话结果
 */
export function startChat(data) {
  return request({
    url: '/chat/start',
    method: 'post',
    data
  });
}

/**
 * 预约看房
 * @param {Object} data - 预约信息
 * @returns {Promise<Object>} - 预约结果
 */
export function makeAppointment(data) {
  return request({
    url: '/appointment/create',
    method: 'post',
    data
  });
}

/**
 * 获取经纪人的用户ID（用于聊天）
 * @param {number} agentId - 经纪人ID
 * @returns {Promise<Object>} - 包含用户ID的响应
 */
export function getAgentUserId(agentId) {
  if (!agentId) {
    console.error('getAgentUserId: 无效的经纪人ID');
    return Promise.reject(new Error('无效的经纪人ID'));
  }
  
  return request({
    url: `/agent/${agentId}/userid`,
    method: 'get'
  });
} 